home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / textyl / psrc / h00vars.h < prev    next >
C/C++ Source or Header  |  1993-11-07  |  7KB  |  253 lines

  1. /* Copyright (c) 1979 Regents of the University of California */
  2.  
  3. /* static char sccsid[] = "@(#)vars.h 1.12 1/22/83"; */
  4.  
  5. #include <stdio.h>
  6.  
  7. /*
  8.  * px - Berkeley Pascal interpreter
  9.  *
  10.  * Version 4.0, January 1981
  11.  *
  12.  * Original version by Ken Thompson
  13.  *
  14.  * Substantial revisions by Bill Joy and Chuck Haley
  15.  * November-December 1976
  16.  *
  17.  * Rewritten for VAX 11/780 by Kirk McKusick
  18.  * Fall 1978
  19.  *
  20.  * Rewritten in ``C'' using libpc by Kirk McKusick
  21.  * Winter 1981
  22.  *
  23.  * Px is described in detail in the "PX 4.0 Implementation Notes"
  24.  * The source code for px is in several major pieces:
  25.  *
  26.  *    int.c        C main program which reads in interpreter code
  27.  *    interp.c    Driver including main interpreter loop and
  28.  *            the interpreter instructions grouped by their
  29.  *            positions in the interpreter table.
  30.  *    utilities.c    Interpreter exit, backtrace, and runtime statistics.
  31.  *
  32.  * In addition there are several headers defining mappings for panic
  33.  * names into codes, and a definition of the interpreter transfer
  34.  * table. These are made by the script make.ed1 in this directory and 
  35.  * the routine opc.c from ${PASCALDIR}. (see the makefile for details)
  36.  */
  37. #define PXPFILE        "pmon.out"
  38. #define    BITSPERBYTE    8
  39. #define    BITSPERLONG    (BITSPERBYTE * sizeof(long))
  40. #define HZ        100
  41. #define NAMSIZ        76
  42. #define MAXFILES    32
  43. #define PREDEF        2
  44. #ifdef ADDR32
  45. #define STDLVL        ((struct iorec *)(0x7ffffff1))
  46. #define GLVL        ((struct iorec *)(0x7ffffff0))
  47. #endif ADDR32
  48. #ifdef ADDR16
  49. #define STDLVL        ((struct iorec *)(0xfff1))
  50. #define GLVL        ((struct iorec *)(0xfff0))
  51. #endif ADDR16
  52. #define FILNIL        ((struct iorec *)(0))
  53. #define INPUT        ((struct iorec *)(&input))
  54. #define OUTPUT        ((struct iorec *)(&output))
  55. #define ERR        ((struct iorec *)(&_err))
  56. #define    PX    0    /* normal run of px */
  57. #define    PIX    1    /* load and go */
  58. #define    PIPE    2    /* bootstrap via a pipe */
  59. #define    PDX    3    /* invoked by the debugger "pdx" */
  60. #define releq 0
  61. #define relne 2
  62. #define rellt 4
  63. #define relgt 6
  64. #define relle 8
  65. #define relge 10
  66. typedef enum {FALSE, TRUE} bool;
  67.  
  68. /*
  69.  * interrupt and allocation routines
  70.  */
  71. extern long createtime;
  72. extern char *PALLOC();
  73. extern char *malloc();
  74. extern long time();
  75. extern intr();
  76. extern memsize();
  77. extern syserr();
  78. extern liberr();
  79.  
  80. /*
  81.  * stack routines and structures
  82.  */
  83. struct sze8 {
  84.     char element[8];
  85. };
  86. extern short pop2();
  87. extern long pop4();
  88. extern double pop8();
  89. extern struct sze8 popsze8();
  90. extern char *pushsp();
  91.  
  92. /*
  93.  * emulated pc types
  94.  */
  95. union progcntr {
  96.     char *cp;
  97.     unsigned char *ucp;
  98.     short *sp;
  99.     unsigned short *usp;
  100.     long *lp;
  101.     double *dbp;
  102.     struct hdr *hdrp;
  103. };
  104.  
  105. /*
  106.  * THE RUNTIME DISPLAY
  107.  *
  108.  * The entries in the display point to the active static block marks.
  109.  * The first entry in the display is for the global variables,
  110.  * then the procedure or function at level one, etc.
  111.  * Each display entry points to a stack frame as shown:
  112.  *
  113.  *        base of stack frame
  114.  *          ---------------
  115.  *          |        |
  116.  *          | block mark  |
  117.  *          |        |
  118.  *          ---------------  <-- display entry "stp" points here
  119.  *          |             |  <-- display entry "locvars" points here
  120.  *          |   local    |
  121.  *          |  variables  |
  122.  *          |        |
  123.  *          ---------------
  124.  *          |        |
  125.  *          |  expression |
  126.  *          |  temporary  |
  127.  *          |  storage    |
  128.  *          |        |
  129.  *          - - - - - - - -
  130.  *
  131.  * The information in the block mark is thus at positive offsets from
  132.  * the display.stp pointer entries while the local variables are at negative
  133.  * offsets from display.locvars. The block mark actually consists of
  134.  * two parts. The first part is created at CALL and the second at entry,
  135.  * i.e. BEGIN. Thus:
  136.  *
  137.  *        -------------------------
  138.  *        |            |
  139.  *        |  Saved lino        |
  140.  *        |  Saved lc        |
  141.  *        |  Saved dp        |
  142.  *        |            |
  143.  *        -------------------------
  144.  *        |            |
  145.  *        |  Saved (dp)        |
  146.  *        |            |
  147.  *        |  Pointer to current     |
  148.  *        |   routine header info    |
  149.  *        |            |
  150.  *        |  Saved value of    |
  151.  *        |   "curfile"        |
  152.  *        |            |
  153.  *        |  Empty tos value    |
  154.  *        |            |
  155.  *        -------------------------
  156.  */
  157.  
  158. /*
  159.  * program variables
  160.  */
  161. extern union display    _display;    /* runtime display */
  162. extern struct dispsave    *_dp;        /* ptr to active frame */
  163. extern long        _lino;        /* current line number */
  164. extern int        _argc;        /* number of passed args */
  165. extern char        **_argv;    /* values of passed args */
  166. extern bool        _nodump;    /* TRUE => no post mortum dump */
  167. extern long        _runtst;    /* TRUE => runtime tests */
  168. extern long        _mode;        /* execl by PX, PIPE, or PIX */
  169. extern long        _stlim;        /* statement limit */
  170. extern long        _stcnt;        /* statement count */
  171. extern long        _seed;        /* random number seed */
  172. extern char        *_maxptr;    /* maximum valid pointer */
  173. extern char        *_minptr;    /* minimum valid pointer */
  174. extern long        *_pcpcount;    /* pointer to pxp buffer */
  175. extern long        _cntrs;        /* number of counters */
  176. extern long        _rtns;        /* number of routine cntrs */
  177.  
  178. /*
  179.  * The file i/o routines maintain a notion of a "current file".
  180.  * A pointer to this file structure is kept in "curfile".
  181.  *
  182.  * file structures
  183.  */
  184. struct iorechd {
  185.     char        *fileptr;    /* ptr to file window */
  186.     long        lcount;        /* number of lines printed */
  187.     long        llimit;        /* maximum number of text lines */
  188.     FILE        *fbuf;        /* FILE ptr */
  189.     struct iorec    *fchain;    /* chain to next file */
  190.     struct iorec    *flev;        /* ptr to associated file variable */
  191.     char        *pfname;    /* ptr to name of file */
  192.     short        funit;        /* file status flags */
  193.     short        fblk;        /* index into active file table */
  194.     long        fsize;        /* size of elements in the file */
  195.     char        fname[NAMSIZ];    /* name of associated UNIX file */
  196. };
  197.  
  198. struct iorec {
  199.     char        *fileptr;    /* ptr to file window */
  200.     long        lcount;        /* number of lines printed */
  201.     long        llimit;        /* maximum number of text lines */
  202.     FILE        *fbuf;        /* FILE ptr */
  203.     struct iorec    *fchain;    /* chain to next file */
  204.     struct iorec    *flev;        /* ptr to associated file variable */
  205.     char        *pfname;    /* ptr to name of file */
  206.     short        funit;        /* file status flags */
  207.     short        fblk;        /* index into active file table */
  208.     long        fsize;        /* size of elements in the file */
  209.     char        fname[NAMSIZ];    /* name of associated UNIX file */
  210.     char        buf[BUFSIZ];    /* I/O buffer */
  211.     char        window[1];    /* file window element */
  212. };
  213.  
  214. /*
  215.  * unit flags
  216.  */
  217. #define    FDEF    0x80    /* 1 => reserved file name */
  218. #define    FTEXT    0x40    /* 1 => text file, process EOLN */
  219. #define    FWRITE    0x20    /* 1 => open for writing */
  220. #define    FREAD    0x10    /* 1 => open for reading */
  221. #define    TEMP    0x08    /* 1 => temporary file */
  222. #define    SYNC    0x04    /* 1 => window is out of sync */
  223. #define    EOLN    0x02    /* 1 => at end of line */
  224. #define    EOFF    0x01    /* 1 => at end of file */
  225.  
  226. /*
  227.  * file routines
  228.  */
  229. extern struct iorec    *GETNAME();
  230. extern char        *MKTEMP();
  231.  
  232. /*
  233.  * file record variables
  234.  */
  235. extern struct iorechd    _fchain;    /* head of active file chain */
  236. extern struct iorec    *_actfile[];    /* table of active files */
  237. extern long        _filefre;    /* last used entry in _actfile */
  238.  
  239. /*
  240.  * standard files
  241.  */
  242. extern struct iorechd    input;
  243. extern struct iorechd    output;
  244. extern struct iorechd    _err;
  245.  
  246. /*
  247.  * Px execution profile array
  248.  */
  249. #ifdef PROFILE
  250. #define    NUMOPS 256
  251. extern long _profcnts[NUMOPS];
  252. #endif PROFILE
  253.